/*
 * Copyright (c) 2021 Huawei Device Co.,  Ltd.
 * Licensed under the Apache License,  Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,  software
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,  either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#ifndef SWANLINK_FINANCE_CARDSENDER_PLUGIN_MGR_INCLUDE_PLUGIN_H
#define SWANLINK_FINANCE_CARDSENDER_PLUGIN_MGR_INCLUDE_PLUGIN_H

#include "iadaptor.h"
#include <memory>
#include "cashdevice_def.h"

// 插件接口
struct Plugin {
    std::shared_ptr<SwanLink::Finance::IAdaptor> (*CreateAdaptor)();
    SwanLink::Finance::Transport (*GetAccess)(SwanLink::Finance::ACCESS_MODE mode, const char *dev);
    const char* version;
    const char* name;
    const char* desc;
    int   id;
};

#ifdef __cplusplus
extern "C" {
#endif
    Plugin *GetPlugin();
#ifdef __cplusplus
};
#endif

#define PLUGIN_INIT(p) \
Plugin *GetPlugin() {\
    return p; \
}

typedef Plugin *(*GetPluginFunc)();

#endif  // SWANLINK_FINANCE_CARDSENDER_PLUGIN_MGR_INCLUDE_PLUGIN_H
